#ifndef MINIMUSIC_H
#define MINIMUSIC_H

#include <QWidget>
#include "volumetool.h"
#include "lrcpage.h"
#include "musiclist.h"
#include <QMediaPlaylist>
#include <QPropertyAnimation>
#include <QSqlDatabase>
#include "commonpage.h"

QT_BEGIN_NAMESPACE
namespace Ui { class MiniMusic; }
QT_END_NAMESPACE

class MiniMusic : public QWidget
{
    Q_OBJECT

public:
    MiniMusic(QWidget *parent = nullptr);
    ~MiniMusic();

    void PageChange(int id);

    void initUI();

    void initSqliter();

    void initMusicList();

    void initPlayer();

    QJsonArray randomPiction();

    void updateBtformAnimal();

    void MinMusicQuit();
protected:
    void mousePressEvent(QMouseEvent *event);
    void mouseMoveEvent(QMouseEvent *event);
    void onMetaDataAvailableChanged(bool available);

    void onMusicSliderChanged(float ration);    //进度条改变需要播放时间跟着修改



private slots:
    void on_min_clicked();

    void on_quit_clicked();

    void on_addLocal_clicked();

    void on_volume_clicked();

    void on_update_page(bool isLike,const QString& musicId);

    void onLrcWordCilcked();
    //播放控制区的槽函数
    //播放按钮: 歌曲在播放和暂停直接进行切换
    void onPlayMusic();

    //QMediaPlayer中stateChanged信号对应的槽函数
    void onPlayerStateChanged();

    //上一曲
    void onPlayUpClicked();
    //下一曲
    void onPlayDownClicked();
    //播放模式的设置
    void onPlaybackModeClicked();

    void onPlaybackModeChnaged(QMediaPlaylist::PlaybackMode playBackMode);

    void onPlayAll(PageType page); // 播放所以按钮发射信号的槽函数

     void playAllMusicOfCommpagePage(CommonPage* page,int index);

     void palyMusicByIndex(CommonPage* page, int index);

     void onCurrentIndexChanged(int index);

     //VolumeTool类中setMusicMuted信号对应的槽函数
     void setPlayerMuted(bool isMuted);

     //VolumeTool类中setMusicVolume信号对应的槽函数
     void setPlayerVolume(int volume);

     void onDurationChanged(qint64 duration);

     void onPositionChanged(qint64 position);


     void on_skin_clicked();

     void on_max_clicked();

private:
    Ui::MiniMusic *ui;
    QPoint dragPosition;
    VolumeTool* volume;
    LrcPage* lrcPage;
    MusicList musicList;

    QSqlDatabase sqlite;

    QMediaPlayer* player;       //专门用来播放控制
    QMediaPlaylist* playList;   //专门用来管理播放源,包含一些播放模式的设计
    
    CommonPage* currentPage;    //记录当前播放的Commonpage页面

    qint64 totaltime = 0;           //记录媒体源的总时间

    int currentIndex = -1;             //记录媒体源的索引

    QPropertyAnimation* lrcPageAnimal;

    bool isDrag = true;

};
#endif // MINIMUSIC_H
